
#include "Armadura.h"
#include <iostream>
#include <algorithm>

const vector<int> EstadoArmadura::acciones = make_vector<int>() << EstadoBasico::Movimiento;
const vector<string> EstadoArmadura::descripcionAcciones = make_vector<string>() << "mover";

Armadura::Armadura(int x, int y, int maximoX, int maximoY, Orientacion orientacion) : ObjetoMovible(x, y, maximoX, maximoY, orientacion) {

	if (orientacion == Derecha)
		estadoDerecha = Empezo;
	else // if (orientacion == Izquierda)
		estadoIzquierda = Empezo;
		
	estado = EstadoBasico::Movimiento;
	prioridad = 5;
	tipo = BONUS;
}

void Armadura::Actualizar(Uint32 time) {
	
	if (estadoDerecha == Moviendo) {
		MoverDerecha(maximoX, time - lastTimeActualizar);
		if (getPosicion().getX() > maximoX) {
			setEstadoVida(Muerto);
		}
	}
	
	if (estadoIzquierda == Moviendo) {
		MoverIzquierda(time - lastTimeActualizar);
		if (getPosicion().getX() + getAncho() < 0){
			setEstadoVida(Muerto);
		}
	}
	
	if (estadoDerecha == Empezo) {
		estadoDerecha = Moviendo;
		setEstado(EstadoBasico::Movimiento);
	}
	
	if (estadoIzquierda == Empezo) {
		estadoIzquierda = Moviendo;
		setEstado(EstadoBasico::Movimiento);
	}
}

int Armadura::indexEstado(int estado) {

	vector<int> estados = EstadoArmadura::acciones;
	unsigned int posicion = find(estados.begin(), estados.end(), estado) - estados.begin();
	
	if (posicion >= estados.size())
		return -1;
	
	return posicion;
}

void Armadura::Morir() {
	setEstadoVida(Muerto);
}

void Armadura::ColisionarConPersonaje(ObjetoEstatico* personaje, int colX, int colY, int colXvieja, int colYvieja) {

	if (!static_cast<Personaje*> (personaje)->getArmadura()) static_cast<Personaje*> (personaje)->setArmadura(true);
	setEstadoVida(Muerto);
}

void Armadura::ColisionarConEnemigo(ObjetoEstatico* movible, int colX, int colY, int colXvieja, int colYvieja) {

}
